import subprocess
import os


def flac_to_mp3(input_file, output_file):
    """
    使用 FFmpeg 将 FLAC 文件转换为高质量的 MP3 文件
    :param input_file: 输入的 FLAC 文件路径
    :param output_file: 输出的 MP3 文件路径
    """
    try:
        # 构建 FFmpeg 命令
        command = [
            'ffmpeg',
            '-i', input_file,
            '-b:a', '320k',  # 设置音频比特率为 320kbps
            '-ar', '44100',  # 设置采样率为 44100Hz
            '-acodec', 'libmp3lame',  # 指定音频编码器为 libmp3lame
            output_file
        ]
        # 执行 FFmpeg 命令
        subprocess.run(command, check=True)
        print(f"成功将 {input_file} 转换为 {output_file}")
    except subprocess.CalledProcessError as e:
        print(f"转换过程中出现错误: {e}")
    except Exception as e:
        print(f"发生未知错误: {e}")


def convert_flac_files_in_directory(input_dir, output_dir):
    """
    批量转换指定目录下的所有 FLAC 文件为 MP3 文件
    :param input_dir: 输入目录，包含 FLAC 文件
    :param output_dir: 输出目录，用于保存转换后的 MP3 文件
    """
    # 检查输出目录是否存在，如果不存在则创建
    if not os.path.exists(output_dir):
        os.makedirs(output_dir)

    # 遍历输入目录下的所有文件
    for root, dirs, files in os.walk(input_dir):
        for file in files:
            if file.lower().endswith('.flac'):
                # 构建输入文件的完整路径
                input_file = os.path.join(root, file)
                # 构建输出文件的完整路径
                output_filename = os.path.splitext(file)[0] + '.mp3'
                output_file = os.path.join(output_dir, output_filename)
                # 调用转换函数进行转换
                flac_to_mp3(input_file, output_file)


if __name__ == "__main__":
    input_directory = "D:\source_flac"
    output_directory = "D:\my_mp3"
    convert_flac_files_in_directory(input_directory, output_directory)